﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Text.RegularExpressions;

namespace Jurassic_Island
{
    public partial class FormInsertEventoLocalizacion : Form
    {
        private ENLugares enLug = new ENLugares();
        private ENEventosLocalizacion enEvLoc;
        private bool editMode = false;
        private string exprEfecto = @"^[-]?[0-9]+$";

        public FormInsertEventoLocalizacion()
        {
            enEvLoc = new ENEventosLocalizacion();
            InitializeComponent();
        }

        public FormInsertEventoLocalizacion(ENEventosLocalizacion enEventoLoc)
        {
            enEvLoc = enEventoLoc;
            editMode = true;
            InitializeComponent();
        }

        private void FormInsertEventoLocalizacion_Load(object sender, EventArgs e)
        {
            DataSet dsLugares = enLug.ObtenerNombresLugares();
            foreach (DataRow dr in dsLugares.Tables[0].Rows)
            {
                cbSitio_evloc.Items.AddRange(dr.ItemArray);
            }

            if (editMode)
            {
                this.Text = "Editar Evento de Localización";
                btInsertar.Text = "Actualizar";
                tbID_evloc.Text = enEvLoc.Id_evloc.ToString();
                tbNombre_evloc.Text = enEvLoc.Nombre_evloc.ToString();
                cbSitio_evloc.Text = enEvLoc.Sitio_evloc.ToString();
                tbEfecto_evloc.Text = enEvLoc.Efecto_evloc.ToString();
            }
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            Close();
        }

        private void btInsertar_Click(object sender, EventArgs e)
        {
            try
            {
                if (ValidarCampos())
                {
                    try
                    {
                        enEvLoc.Nombre_evloc = tbNombre_evloc.Text;
                        enEvLoc.Sitio_evloc = cbSitio_evloc.Text;
                        enEvLoc.Efecto_evloc = double.Parse(tbEfecto_evloc.Text);

                        if (enEvLoc.InsertarEventoLocalizacion(editMode))
                        {
                            if (editMode)
                                MessageBox.Show("Evento de localización editado correctamente", "Éxito al editar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            else
                                MessageBox.Show("Evento de localización insertado correctamente", "Éxito al insertar", MessageBoxButtons.OK, MessageBoxIcon.Information);
                            this.DialogResult = DialogResult.OK;
                        }
                        else
                            MessageBox.Show("Error, no se ha podido insertar el evento de localización", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, "Error");
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        private bool ValidarCampos()
        {
            bool correcto = true;

            try
            {
                string errores = "Corrige los siguientes errores:\n";

                if (tbNombre_evloc.Text == "")
                {
                    correcto = false;
                    errores += "-Introduce un nombre\n";
                    epEvLoc.SetError(tbNombre_evloc, "Introduce un nombre");
                }
                else
                    epEvLoc.SetError(tbNombre_evloc, null);

                if (cbSitio_evloc.Text == "")
                {
                    correcto = false;
                    errores += "-Selecciona un lugar\n";
                    epEvLoc.SetError(cbSitio_evloc, "Selecciona un lugar");
                }
                else
                    epEvLoc.SetError(cbSitio_evloc, null);

                try
                {
                    if (!Regex.Match(tbEfecto_evloc.Text, exprEfecto).Success)
                    {
                        correcto = false;
                        errores += "-Introduce un efecto correcto (número entero)\n";
                        epEvLoc.SetError(tbEfecto_evloc, "Introduce un efecto correcto (número entero)\n");
                    }

                    else
                        epEvLoc.SetError(tbEfecto_evloc, null);
                }
                catch (FormatException fEx)
                {
                    MessageBox.Show(fEx.Message, "Error de formato", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }

                if (!correcto)
                {
                    throw new Exception(errores);
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }

            return correcto;
        }

        private void tbEfecto_evloc_TextChanged(object sender, EventArgs e)
        {
            if (!Regex.IsMatch(tbEfecto_evloc.Text, exprEfecto))
            {
                epEvLoc.SetError(tbEfecto_evloc, "Introduce un coste correcto (número entero)");
            }
            else
            {
                epEvLoc.SetError(tbEfecto_evloc, "");
            }
        }
    }
}
